package com.kcst.configure;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

/**
 * @author: glc.
 * Date: 2022/8/12  15:14
 * Description:
 */
public class ConfigureManager {

    private static volatile ConfigureManager mInstance;
    private int mArrangeMaxRows = 15;

    private static Map<String,String> mConfigureValues = new LinkedHashMap<>();

    private static Map<String,String> mFieldsValues = new HashMap<>();

    public static ConfigureManager getInstance(){
        if (mInstance == null){
            synchronized (ConfigureManager.class){
                if (mInstance == null){
                    mInstance = new ConfigureManager();
                }
            }
        }
        return mInstance;
    }

    /**
     * 在Application中调用
     */
    public void init(ConfigureInter configureInter){
        setConfigureValue(configureInter);
        //从sp获取
        Map<String, String> fieldsValues = SpUtils.getMap("FIELDS_KEY");
        if (fieldsValues != null && fieldsValues.size() > 0){
            mFieldsValues.putAll(fieldsValues);
            return;
        }
        //从文件中读取
        String read = FileUtils.read();
        if (read == null || read.length() == 0){return;}
        String[] readValue = read.split(";");
        for (String values : readValue) {
            String[] fieldsValue = values.split("=");
            mFieldsValues.put(fieldsValue[0], fieldsValue.length == 1?"":fieldsValue[1]);
        }
    }

    public void setFieldsValue(String fields,String value){
        mFieldsValues.put(fields,value);
    }

    /**
     * 获取配置项的值
     * @param fields 常量
     * @return 如果配置了返回对应的值否则返回null
     */
    public String getFieldsValue(String fields){
        return mFieldsValues.get(fields);
    }

    /**
     * 获取配置项的值
     * @param fields 常量
     * @param defaultValue 设置默认值
     * @return 如果配置了返回对应的值否则返回 defaultValue 值
     */
    public String getFieldsStringValue(String fields,String defaultValue){
        if (mFieldsValues.containsKey(fields)) {
            return mFieldsValues.get(fields);
        }else {
            return defaultValue;
        }
    }

    /**
     * 获取配置项的值
     * @param fields 常量
     * @param defaultValue 设置默认值
     * @return int类型数据
     */
    public int getFieldsIntValue(String fields,int defaultValue){
        if (mFieldsValues.containsKey(fields)) {
            return Integer.parseInt(Objects.requireNonNull(mFieldsValues.get(fields)));
        }else {
            return defaultValue;
        }
    }



    /**
     * 获取所有的数据
     * @return
     */
    public Map<String, String> getAllFieldsValues(){
        return mFieldsValues;
    }


    private void setConfigureValue(ConfigureInter configureInter){
        Map<String, String> configureValues = configureInter.setConfigureValue();
        if (configureValues != null && configureValues.size() >0) {
            mConfigureValues.clear();
            mConfigureValues.putAll(configureValues);
        }
    }

    public Map<String, String> getConfigureValues(){
        return mConfigureValues;
    }

    /**
     * 设置数据的最大行数
     * @param value
     */
    public void setArrangeMaxRows(int value){
        this.mArrangeMaxRows = value;
    }

    protected int getArrangeMaxRows(){
        return mArrangeMaxRows;
    }


    private int getConfigureKeyMaxLength(){
        if (mConfigureValues.size() > 0){
            Set<String> key = mConfigureValues.keySet();
        }
        return 0;
    }
}
